# -*- coding:utf-8 -*-
import logging
from logging.handlers import RotatingFileHandler

from flask import Flask, g, render_template
from flask_sqlalchemy import SQLAlchemy
from utils.config import config

db = SQLAlchemy()
from .models import Task, Schedule


def setup_log(configName):
    # 设置日志级别
    logging.basicConfig(level=config[configName].LOG_LEVEL)
    # 创建日志记录器，指明日志保存路径、日志文件大小、保存日志数量上限等
    fileLogHandler = RotatingFileHandler(config[configName].LOG_PATH,
                                         maxBytes=config[configName].LOG_FILE_SIZE,
                                         backupCount=config[configName].LOG_FILE_MAX_COUNT,
                                         encoding=config[configName].LOG_ENCODING)
    # 创建日志记录格式、等级、如数日志信息的文件名、行数、日志信息
    formatter = logging.Formatter("%(asctime)s 【%(levelname)s】 %(filename)s:%(lineno)d %(message)s")
    # 为刚创建的日志记录器设置日志记录格式
    fileLogHandler.setFormatter(formatter)
    # 为全局的日志工具对象(flask app使用的)添加日志记录器
    logging.getLogger().addHandler(fileLogHandler)


def create_app(configName):
    # 加载日志配置
    setup_log(configName)
    # 创建app对象
    app = Flask(__name__)
    # 加载配置
    app.config.from_object(config[configName])
    # 初始化数据库
    db.init_app(app)

    # 注册蓝图
    from info.modules.task import task_blu
    app.register_blueprint(task_blu)

    @app.errorhandler(404)
    def page_not_found(e):
        """404统一处理"""
        return render_template("news/404.html")

    return app
